home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2000 May
/
Chip_2000-05_cd1.bin
/
sharewar
/
FFE
/
GRAPH.SWG
/
0070_TIFF v4.0.pas
< prev
Wrap
Pascal/Delphi Source File
|
1997-05-12
|
57KB
|
1,494 lines
Tag Image File Format Rev 4.0
April 31, 1987
This memorandum has been prepared jointly by Aldus and Microsoft in
conjunction with leading scanner and printer manufacturers. This
document does not represent a commitment on the part of either Microsoft
or Aldus to provide support for this file format in any application.
When responding to specific issues raised in this memo, or when
requesting additional tag or field assignments, please address your
correspondence to either:
Tim Davenport Manny Vellon
Aldus Corporation Windows Marketing Group
411 First Ave. South Microsoft Corporation
Suite 200 16011 NE 36th Way
Seattle, WA 98104 Box 97017
Redmond, WA 98073-9717
Revision Notes
This release of the TIFF specification has been given a Revision number.
It is really the fourth major revision, so the Revision number was set
to 4.0.
Abstract
This document describes TIFF, a tag based file format that is designed
to promote the interchange of digital image data.
The fields were defined primarily with desktop publishing and related
applications in mind, although it is conceivable that other sorts of
imaging applications may find TIFF to be useful.
The general scenario for which TIFF was invented assumes that
applications software for scanning or painting creates a TIFF file,
which can then be read and incorporated into a document or publication
by an application such as a desktop publishing package.
The intent of TIFF is to organize and codify existing practice with
respect to the definition and usage of desktop digital data, not to
blaze new paths or promote unproven techniques. Yet a very high priority
has been given to structuring the data in such a way as to minimize the
pain of future additions. TIFF was designed to be a very extensible
interchange format.
TIFF is not a printer language or page description language, nor is it
intended to be a general document interchange standard. It may be useful
as is for some image editing applications, but is probably inappropriate
for and would thus need to be translated into some intermediate data
structures by other image editing applications. The primary design goal
was to provide a rich environment within which the exchange of image
data between application programs can be accomplished. This richness is
required in order to take advantage of the varying capabilities of
scanners and similar devices. TIFF is therefore designed to be a
superset of existing image file formats for desktop scanners (and paint
programs and anything else that produces images with pixels in them) and
will be enhanced on a continuing basis as new capabilities arise.
Although TIFF is claimed to be in some sense a rich format, it can
easily be used for simple scanners and applications as well, since the
application developer need only be concerned with the capabilities that
he requires. The mechanisms for accomplishing this goal are discussed in
the next section.
TIFF is intended to be independent of specific operating systems, filing
systems, compilers, and processors. The only significant assumption is
that the storage medium supports something like a file, defined as a
sequence of 8-bit bytes, where the bytes are numbered from 0 to N. The
largest possible TIFF file is 2**32 bytes. Since pointers (byte offsets)
are used liberally, a TIFF file is most easily read from a random access
device, although it is possible to read and write TIFF files on
sequential media such as magnetic tape.
The recommended MS-DOS file extension for TIFF files is .TIF. The
recommended Macintosh filetype is TIFF. Conventions in other computing
environments have not yet been established.
1) Conformance
Many of the application programs that read the contents of TIFF image
files will not support all of the features described in this document.
In some cases, little more than the default options will be supported.
It is up to each organization to determine the costs and benefits
associated with different levels of conformity. Therefore, claims of
conformity to this specification should be interpreted with a certain
amount of caution.
It follows that the usage of this specification does not preclude the
need for coordination between image file writers and image file readers.
It is up to the application designer that initially writes a file in
this format to verify that the desired file options are supported by the
applications that will read the file.
2) Structure
In TIFF, individual fields are identified with a unique tag. This allows
particular fields to be present or absent from the file as required by
the application.
Some TIFF files will have only a few fields in them; others will have
many. Software that creates TIFF files should write out as many fields
as it believes will be meaningful and useful (and no more). Software
that reads TIFF files should do the best it can with the fields that it
finds there.
See Appendix A: Tag Structure Rationale.
There are many ways in which a tag-oriented file format scheme can be
implemented. TIFF uses the following approach:
There are three main parts to a TIFF file. First is a short image file
header. Next is a directory of all the fields that are to be found in
this file. Finally, we have the data for the fields.
3) Header and Directory
A TIFF file begins with a small amount of positionally defined data,
containing the following information:
Bytes 0-1:
The first word of the file serves to specify the byte order used within
the file. The currently defined values are:
II (hex 4949)
MM (hex 4D4D)
In the II format, byte order is always from least significant to most
significant, for both 16-bit and 32-bit integers.
In the MM format, byte order is always from most significant to least
significant, for both 16-bit and 32-bit integers.
In both formats, character strings are stored into sequential byte
locations.
It is certainly not required that all applications software be able to
handle both formats. It should be apparent which is the native format
for a particular machine.
Bytes 2-3:
The second word of the file is the TIFF version number. This number
shouldnt change. This document describes Version 42, so 42 (2A in hex)
should be stored in this word.
Bytes 4-7:
This long word contains the offset (in bytes) of the first Image File
Directory. The directory may be at any location in the file after the
header but must begin on a word boundary.
(The term byte offset is always used in this document to refer to a
location with respect to the beginning of the file. The first byte of
the file has an offset of 0.)
An IFD consists of a 2-byte count of the number of entries (i.e., the
number of fields), followed by a sequence of 12-byte field entries,
followed by a 4-byte offset of the next Image File Directory (or 0 if
none). Each 12-byte field entry has the following format:
Bytes 0-1 contain the Tag for the field. Bytes 2-3 contain the field
Type. Bytes 4-7 contain the Length (Count might have been a better term)
of the field. Bytes 8-11 contain the file offset (in bytes) of the Value
for the field. The Value is expected to begin on a word boundary; the
corresponding file offset will thus be an even number.
The entries in an IFD must be sorted in ascending order by Tag. Note
that this is not the order in which the fields are described in this
document. The Values to which directory entries point need not be in any
particular order in the file.
If the Value fits within 4 bytes, the Offset is interpreted to contain
the Value instead of pointing to the Value, to save a little time and
space. If the Value is less than 4 bytes, it is left-justified. Whether
or not it fits within 4 bytes can be determined by looking at the Type
and Length of the field.
The Length part is specified in terms of the data type. A single 16-bit
word (SHORT) has a Length of 1, not 2, for example. The data types and
their lengths are described below:
1 = BYTE. 8-bit unsigned integer.
2 = ASCII. 8-bit bytes that store ASCII codes; the last byte must
be null.
3 = SHORT. A 16-bit (2-byte) unsigned integer.
4 = LONG. A 32-bit (4-byte) unsigned integer.
5 = RATIONAL. Two LONGs: the first represents the numerator of a
fraction, the second the denominator.
The value of the Length part of an ASCII field entry includes the null.
If padding is necessary, the Length does not include the pad byte.
The reader should check the type to ensure that it is what he expects.
TIFF currently allows more than 1 valid type for a given field. For
example, ImageWidth and ImageLength were specified as having type SHORT.
Very large images with more than 64k rows or columns are possible with
some devices even now. Rather than add parallel LONG tags for these
fields, it is cleaner to allow both SHORT and LONG for ImageWidth and
similar fields. Writers of TIFF files are, however, encouraged to use
the default type values as indicated in this document to insure
compatbility with existing TIFF reader applications.
Note that there may be more than one IFD. Each IFD is said to define a
subfile. One potential use of subsequent subfiles is to describe a
sub-image that is somehow related to the main image, such as a reduced
resolution or screen resolution image. Another use is to represent
multiple page images - for example, a facsimile document requiring more
than one page. Subsequent IFDs will in general contain many of the same
fields as the first IFD but will usually point to or contain different
Values for those fields.
4) Definitions
The TIFF structure itself is not specific to imaging applications in any
way. It is only the definitions of the fields themselves that jointly
describe an image. Before we begin describing the fields, a few image
related definitions may be useful.
An image is defined to be a rectangular array of pixels, each of which
consists of one or more samples. With monochromatic data, we have one
sample per pixel, and sample and pixel can be used interchangeably.
Color data usually contains three samples per pixel, as in, for example,
an RGB scheme.
5) The Fields
The following fields are defined in this version of TIFF. More will be
added in future versions, if possible in such a way so as not to break
old software that encounters a newer TIFF file. An attempt has been made
to group related fields, although the grouping is necessarily somewhat
arbitrary.
The documentation for each field contains the name of the field (quite
arbitrary, but convenient), the Tag value, the field Type, the Number of
Values (N) expected (per IFD, in the case of multiple subfiles),
comments describing the field, and the default, if any. The default
value is used if the field does not exist.
A fairly large number of fields has already been defined, and the number
will grow. Please keep in mind that many common images can be described
using only a handful of these fields (see the Examples section).
General Description
SubfileType
Tag = 255 (FF)
Type = SHORT
N = 1
A general indication of the kind of data that is contained in this
subfile. Currently defined values are:
1 = full resolution image data ImageWidth, ImageLength, and StripOffsets
are required fields.
2 = reduced resolution image data ImageWidth, ImageLength, and
StripOffsets are required fields. It is further assumed that a reduced
resolution image is a reduced version of the entire extent of the
corresponding full resolution data.
3 = Single page of a multi-page image (see the PageNumber tag
description).
If your kind of image data doesnt fit nicely into either description,
contact either Aldus or Microsoft to define an additional value. Note
that both image types can be found in a single TIFF file, with each
subfile described by its own IFD. No default.
Data Architecture
ImageWidth
Tag = 256 (100)
Type = SHORT
N = 1
The images width, in pixels (X: horizontal). The number of columns in
the image. No default.
ImageLength
Tag = 257 (101)
Type = SHORT
N = 1
The images length (height) in pixels (Y: vertical). The number of rows
(sometimes described as scan lines) in the image. ImageLength and
ImageWidth refer only to how the pixels are stored in the file and do
not imply anything about where the visual top or left side of the image
may be. See Orientation for this information. No default.
RowsPerStrip
Tag = 278 (116)
Type = SHORT or LONG
N = 1
The number of rows per strip. The image data is organized into strips
for fast access to individual rows when the data is compressed (though
this field is valid even if the data is not compressed).
Note that either SHORT or LONG values can be used to specify
RowsPerStrip. SHORT values may be used for small TIFF files. It should
be noted, however, that earlier TIFF specifications required LONG values
and that some software may not expect SHORT values.
Default is 2**32 - 1, which is effectively infinity. That is, the entire
image is one strip.
[StripsPerImage]
N = 1
The number of strips per image. This value is not a field, since it can
be computed from two other fields, but it is convenient to give it a
name in order to clarify the use of other fields. The equation to use is
StripsPerImage = (ImageLength + RowsPerStrip - 1) / RowsPerStrip,
assuming integer arithmetic.
StripOffsets
Tag = 273 (111)
Type = SHORT or LONG
N = StripsPerImage for PlanarConfiguration equal to 1.
= SamplesPerPixel * StripsPerImage for PlanarConfiguration equal to 2
For each strip, the byte offset of that strip. The offset is specified
with respect to the beginning of the TIFF file. Note that this implies
that each strip has a location independent of the locations of other
strips. This feature may be useful for certain editing applications.
This field is the only way for a reader to find the image data, and
hence must exist.
Note that either SHORT or LONG values can be used to specify the strip
offsets. SHORT values may be used for small TIFF files. It should be
noted, however, that earlier TIFF specifications required LONG strip
offsets and that some software may not expect SHORT values. No default.
StripByteCounts
Tag = 279 (117)
Type = LONG
N = StripsPerImage for PlanarConfiguration equal to 1.
= SamplesPerPixel * StripsPerImage for PlanarConfiguration equal to 2
For each strip, the number of bytes in that strip. No default.
SamplesPerPixel
Tag = 277 (115)
Type = SHORT
N = 1
The number of samples per pixel. Usually 1 for monochromatic data and 3
for color data (i.e. one sample for each of the color planes.) Default =
1.
BitsPerSample
Tag = 258 (102)
Type = SHORT
N = SamplesPerPixel
Number of bits per sample. Note that this tag allows a different number
of bits per sample for each sample corresponding to a pixel. For
example, RGB color data could use a different number of bits per sample
for each of the three color planes. Default = 1.
PlanarConfiguration
Tag = 284 (11C)
Type = SHORT
N = 1
1 = the sample values for each pixel are stored contiguously, so that
there is a single image plane. See PhotometricInterpretation to
determine the order of the samples within the pixel data.
2 = the samples are stored in separate sample planes. The values in
StripOffsets and StripByteCounts are then arranged as a 2-dimensional
array, with SamplesPerPixel rows and StripsPerImage columns. (All of the
columns for row 0 are stored first, followed by the columns of row 1,
and so on.) PhotometricInterpretation describes the type of data that is
stored in each sample plane.
If SamplesPerPixel is 1, a PlanarConfiguration value of 1 is equivalent
to a value of 2. No default.
Compression
Tag = 259 (103)
Type = SHORT
N = SamplesPerPixel for PlanarConfiguration equal to 1 or 2.
Note that a value is provided for each sample, allowing different
compression schemes to be applied to different planes of data.
1 = No compression, but pack data into bytes as tightly as possible,
with no unused bits except at the end of a row. See also FillOrder. The
bytes are stored as an array of type BYTE, for BitsPerSample <= 8, SHORT
if BitsPerSample > 8 and <= 16, and LONG if BitsPerSample > 16 and <=
32. The byte ordering of data >8 bits must be consistent with that
specified in the TIFF file header (bytes 0 and 1). Intel format files
will have the least significant bytes preceeding the most significant
bytes while Motorola format files will have the opposite.
If the number of bits per sample is not a power of 2, and you are
willing to give up some space for better performance, you may wish to
use the next higher power of 2. For example, if your data can be
represented in 6 bits, you may wish to specify that it is 8 bits deep.
If you take this approach, you should be sure that MinSampleValue and
MaxSampleValue are given correct values (probably 0 and 63 for
intrinsically 6-bit data.) TIFF file readers should use MinSampleValue
and MaxSampleValue to determine the range of values in the data rather
than BitsPerSample.
Rows are required to begin on byte boundaries.
2 = CCITT Group 3 1-Dimensional Modified Huffman run length encoding.
See Appendix B: Data Compression Scheme 2. BitsPerSample must be 1,
since this type of compression is defined only for binary images.
3 = Facsimile-compatible CCITT Group 3, exactly as specified in
Standardization of Group 3 facsimile apparatus for document
transmission, Recommendation T.4, Volume VII, Fascicle VII.3, Terminal
Equipment and Protocols for Telematic Services, The International
Telegraph and Telephone Consultative Committee (CCITT), Geneva, 1985,
pages 16 through 31. Each strip must begin on a byte boundary. (But
recall that an image can be a single strip.) Rows that are not the first
row of a strip are not required to begin on a byte boundary. The data is
stored as bytes, not words byte-reversal is not allowed. Note that the
FillOrder field still applies. See the Group3Options field for Group 3
options such as 1D vs 2D coding.
4 = Facsimile-compatible CCITT Group 4, exactly as specified in
Facsimile Coding Schemes and Coding Control Functions for Group 4
Facsimile Apparatus, Recommendation T.6, Volume VII, Fascicle VII.3,
Terminal Equipment and Protocols for Telematic Services, The
International Telegraph and Telephone Consultative Committee (CCITT),
Geneva, 1985, pages 40 through 48. Each strip must begin on a byte
boundary. Rows that are not the first row of a strip are not required to
begin on a byte boundary. The data is stored as bytes, not words. Note
that the FillOrder field still applies. See the Group4Options field for
Group 4 options.
32771 = the same thing as Compression type 1 (no compression), except
that each row begins on the next available word boundary, instead of
byte boundary.
32773 = PackBits compression, a relatively simple byte-oriented
run-length scheme. See Appendix C.
Data compression only applies to pixel data, as pointed to by
StripOffsets. All other TIFF information is unaffected.
To be determined are additional compression schemes for gray and colored
images. We encourage your suggestions, especially if accompanied by full
specifications and performance information. It is of course desirable to
minimize the number of compression schemes that are being used, but this
is clearly an area in which extremely significant time and space
tradeoffs exist. Default = 1.
Group3Options
Tag = 292 (124)
Type = LONG
N = 1
This field is made up of a set of 32 flag bits. Unused bits are expected
to be 0. Bit 0 is the low-order bit. It is probably not safe to try to
read the file if any bit of this field is set that you dont know the
meaning of.
Bit 0 is 1 for 2-dimensional coding (else 1-dimensional is assumed). For
2-D coding, if more than one strip is specified, each strip must begin
with a 1-dimensionally coded line. That is, RowsPerStrip should be a
multiple of Parameter K as documented in the CCITT specification.
Bit 1 is 1 if uncompressed mode is used.
Bit 2 is 1 if fill bits have been added as necessary before EOL codes
such that EOL always ends on a byte boundary, thus ensuring an
eol-sequence of a 1 byte preceded by a zero nibble: xxxx-0000 0000-0001.
Default is 0, for basic 1-dimensional coding.
Group4Options
Tag = 293 (125)
Type = LONG
N = 1
This field is made up of a set of 32 flag bits. Unused bits are expected
to be 0. Bit 0 is the low-order bit. It is probably not safe to try to
read the file if any bit of this field is set that you dont know the
meaning of. Gray scale and color coding schemes are under study, and
will be added when finalized.
For 2-D coding, each strip is encoded as if it were a separate image. In
particular, each strip begins on a byte boundary; and the coding for the
first row of a strip is encoded independently of the previous row, using
horizontal codes, as if the previous row is entirely white. Each strip
ends with the 24-bit end-of-facsimile block (EOFB).
Bit 0 is unused.
Bit 1 is 1 if uncompressed mode is used.
Default is 0, for basic 2-dimensional binary compression.
FillOrder
Tag = 266 (10A)
Type = SHORT
N = 1
The order of data values within a byte. 1 = most significant bits of the
byte are filled first. That is, data values (or code words) are ordered
from high order bit to low order bit within a byte.
2 = least significant bits are filled first.
Default is FillOrder = 1.
Threshholding
Tag = 263 (107)
Type = SHORT
N = 1
1 = a bilevel line art scan. BitsPerSample must be 1.
2 = a halftone or dithered scan, usually of continuous tone data such as
photographs. BitsPerSample must be 1.
3 = Error Diffused.
Default is Threshholding = 1.
CellWidth
Tag = 264 (108)
Type = SHORT
N = 1
The width, in 1-bit samples, of the dithering/halftoning matrix. Assumes
that Threshholding = 2. That is, this field is only relevant if
Threshholding = 2.
No default.
CellLength
Tag = 265 (109)
Type = SHORT
N = 1
The length, in 1-bit samples, of the dithering/halftoning matrix.
Assumes that Threshholding = 2. This field and the previous field may be
useful for converting from halftoned to true gray level data. No
default.
Photometrics
These fields are useful in determining the visual meaning of the sample
data.
MinSampleValue
Tag = 280 (118)
Type = SHORT
N = SamplesPerPixel
The minimum valid sample value.
Default is 0.
MaxSampleValue
Tag = 281 (119)
Type = SHORT
N = SamplesPerPixel
The maximum valid sample value.
Default is 2**(BitsPerSample) - 1.
PhotometricInterpretation
Tag = 262 (106)
Type = SHORT
N = 1
0 = MinSampleValue should be imaged as white. MaxSampleValue should be
imaged as black. If the bit-map represents gray scale, then the values
between the minimum and maximum sample values should be interpreted
according to either the gray scale response curve information (if
included) or according to the result of some more arbitrary rule. See
GrayResponseCurve.
1 = MinSampleValue should be imaged as black. MaxSampleValue should be
imaged as white. If the bit-map represents gray scale, then the values
between the minimum and maximum sample values should be interpreted
according to either the gray scale response curve information (if
included) or according to the result of some more arbitrary rule.
2 = RGB. In the RGB model, a color is described as a combination of the
three primary colors of light (red, green, and blue) in particular
concentrations. For each of the three samples, MinSampleValue represents
minimum intensity, and MaxSampleValue represents maximum intensity. For
PlanarConfiguration = 1, the samples are stored in the indicated order
within a pixel: first Red, then Green, then Blue. For
PlanarConfiguration = 2, the sample planes are stored in the indicated
order: first the Red sample plane, then the Green plane, then the Blue
plane.
The Red, Green and Blue intensity values are defined according to the
NTSC specifications for primary color chromaticity. These specifications
assume the illumination to be CIE D6500. See the Red, Green and Blue
color response curve tags.
Note: some compression schemes, such as the CCITT schemes, imply a
particular PhotometricInterpretation. Therefore, when reading such data,
TIFF readers should ignore PhotometricInterpretation. And, ideally, TIFF
writers should not write out the field when using one of these schemes.
No default.
GrayResponseUnit
Tag = 290 (122)
Type = SHORT
N = 1
1 = number represents tenths of a unit.
2 = number represents hundredths of a unit.
3 = number represents thousandths of a unit.
4 = number represents ten-thousandths of a unit.
5 = number represents hundred-thousandths of a unit.
Default is 2.
GrayResponseCurve
Tag = 291 (123)
Type = SHORT
N = 2**BitsPerSample
The purpose of the gray response curve and the gray units is to further
provide photometric interpretation information for gray scale image
data. The gray response curve specifies for given levels of gray between
the minimum and maximum sample values the actual photometric gray level
of the value. It represents this gray level in terms of optical density.
The GrayScaleResponseUnits specifies the accuracy of the information
contained in the curve. Since optical density is specified in terms of
fractional numbers, this tag is necessary to know how to interpret the
stored integer information. For example, if GrayScaleResponseUnits is
set to 4 (ten-thousandths of a unit), and a GrayScaleResponseCurve
number for gray level 4 is 3455, then the resulting actual value is
0.3455.
If the gray scale response curve is known for the data in the TIFF file,
and if the gray scale response of the output device is known, then an
intelligent conversion can be made between the input data and the output
device. For example, the output can be made to look just like the input.
In addition, if the input image lacks contrast (as can be seen from the
response curve), then appropriate contrast enhancements can be made.
The purpose of the grey scale response curve is to act as a lookup table
mapping values from 0 to 2**BitsPerSample-1 into specific intensity
values. Refer to the PhotometricInterpretation tag to determine how the
mapping should be done.
ColorResponseUnit
Tag = 300 (12C)
Type = SHORT
N = 1
1 = number represents tenths of a unit.
2 = number represents hundredths of a unit.
3 = number represents thousandths of a unit.
4 = number represents ten-thousandths of a unit.
5 = number represents hundred-thousandths of a unit.
Default is 2.
ColorResponseCurves
Tag = 301 (12D)
Type = SHORT
N = 2**BitsPerSample (for Red samples) +
2**BitsPerSample (for Green samples) +
2**BitsPerSample (for Blue samples)
This tag defines three color response curves (one each for Red, Green
and Blue color information). The curves are stored sequentially (in
red-green-blue order). The size of each table is 2**BitsPerSample, using
the BitsPerSample value corresponding to the respective color. The
ColorResponseUnit further specifies how each entry in the table is to be
interpreted.
The purpose of the color response curves is to act as a lookup table
mapping values from 0 to 2**BitsPerSample-1 into specific intensity
values. The intensity values are as specified by the NTSC color
strandard assuming illumination to be CIE D6500.
Correspondence to the Physical World
XResolution
Tag = 282 (11A)
Type = RATIONAL
N = 1
The number of pixels per ResolutionUnit (see below) in the X direction,
i.e., in the ImageWidth direction. It is, of course, not mandatory that
the image be actually printed at the size implied by this parameter. It
is up to the application to use this information as it wishes.
As is the case for many of these fields, XResolution may be invalid and
irrelevant for some images (e.g., images made with a hand-held
digitizing camera, which has a three-dimensional nature) and should
therefore be absent from the image file. No default.
YResolution
Tag = 283 (11B)
Type = RATIONAL
N = 1
The number of pixels per ResolutionUnit in the Y direction, i.e., in the
ImageLength direction. No default.
ResolutionUnit
Tag = 296 (128)
Type = SHORT
N = 1
To be used with XResolution and YResolution.
1 = no absolute unit of measurement. Used for images that may have a
non-square aspect ratio, but no meaningful absolute dimensions.
2 = inch
3 = centimeter
Default is 2
Orientation
Tag = 274 (112)
Type = SHORT
N = 1
1 = The 0th row represents the visual top of the image, and the 0th column
represents the visual left hand side.
2 = The 0th row represents the visual top of the image, and the 0th column
represents the visual right hand side.
3 = The 0th row represents the visual bottom of the image, and the 0th column
represents the visual right hand side.
4 = The 0th row represents the visual bottom of the image, and the 0th column
represents the visual left hand side.
5 = The 0th row represents the visual left hand side of the image, and the 0th
column represents the visual top.
6 = The 0th row represents the visual right hand side of the image, and the
0th column represents the visual top.
7 = The 0th row represents the visual right hand side of the image, and the
0th column represents the visual bottom.
8 = The 0th row represents the visual left hand side of the image, and the 0th
column represents the visual bottom.
Default is 1.
Document Context
DocumentName
Tag = 269 (10D)
Type = ASCII
The name of the document from which this image was scanned.
No default.
PageName
Tag = 285 (11D)
Type = ASCII
The name of the page from which this image was scanned.
No default.
XPosition
Tag = 286 (11E)
Type = RATIONAL
The X offset of the left side of the image, with respect to the left side of
the page, in inches.
No default.
YPosition
Tag = 287 (11F)
Type = RATIONAL
The Y offset of the top of the image, with respect to the top of the page, in
inches. In the TIFF coordinate scheme, the positive Y direction is down, so
that YPosition is always positive.
No default.
PageNumber
Tag = 297 (129)
Type = SHORT
N = 2
This tag is used to specify page numbers of a multiple page (e.g. facsimile)
document. Two SHORT values are specified. The first value is the page number;
the second value is the total number of pages in the document.
Note that pages need not appear in numerical order.
Miscellaneous Strings
ImageDescription
Tag = 270 (10E)
Type = ASCII
Useful or interesting information about the image.
No default.
Make
Tag = 271 (10F)
Type = ASCII
The name of the scanner manufacturer.
No default.
Model
Tag = 272 (110)
Type = ASCII
The model name/number of the scanner.
No default.
Storage Management
These fields may be useful in certain dynamic editing situations.
Software that merely reads TIFF files will probably not need to care
about these fields. And, of course, software that creates TIFF files is
by no means required to write these fields.
FreeOffsets
Tag = 288 (120)
Type = LONG
For each free block in the file, its byte offset.
No default.
FreeByteCounts
Tag = 289 (121)
Type = LONG
For each free block in the file, the number of bytes in the block.
6) Examples
A binary image from a paint program might contain only SubfileType,
ImageWidth, ImageLength, StripOffsets, and PhotometricInterpretation
fields.
A typical line art scan might require that XResolution and YResolution
be added to the above list.
7) Private Fields
An organization may wish to store with the image file information that
is meaningful only to that organization. Tags numbered 32768 or higher
are reserved for that purpose. Upon request, the administrator will
allocate and register a block of private tags for an organization, to
avoid possible conflicts with other organizations.
Private enumerated values can be accommodated in a similar fashion.
Enumeration constants numbered 32768 or higher are reserved for private
usage. Upon request, the administrator will allocate and register a
block of enumerated values for a particular field, to avoid possible
conflicts.
Tags and values which are allocated in the private number range are not
prohibited from being included in a future revision of this
specification. Several such instances can be found in this revision.
8) A List of Possible Future Enhancements
In the future TIFF will very likely be expanded to support more
compression schemes, more photometric schemes, color lookup tables, and
non-rectangular images. Please refer all questions regarding
enhancements to TIFF to the contacts listed at the beginning of the
document. Written submissions should be in Microsoft Windows Write
format, to ensure timely and error-free incorporation into the
specification.
Tag Image File Format Rev 4.0
April 31, 1987
Appendix A: Tag Structure Rationale
A file format is defined by both form (structure) and content. The
content of TIFF consists of definitions of individual fields. It is
therefore the content that we are ultimately interested in. The
structure merely tells us how to find the fields.
Yet the structure deserves serious consideration for a number of reasons
that are not at all obvious at first glance. Since the structure
described herein departs significantly from several other approaches, it
may be useful to discuss the rationale behind it.
The simplest, most straightforward structure for something like an image
file is a positional format. In a positional scheme, the location of the
data defines what the data means. For example, the field for number of
rows might begin at byte offset 30 in the image file.
This approach is simple and easy to implement and is perfect for static
environments. But if a significant amount of ongoing change must be
accommodated, some subtle problems start showing up. For example,
suppose that a field must be superseded by a new, more general field.
You could bump a version number to flag the change. Then new software
has no problem doing something sensible with old data, and all old
software will reject the new data, even software that didnt care about
the old field. This may seem like no more than a minor annoyance at
first glance, but causing old software to break more often than it would
really need to can be very costly and, inevitably, causes much gnashing
of teeth among customers.
Furthermore, it can be avoided. One approach is to store a valid flag
bit for each field. Now you dont have to bump the version number, as
long as you can put the new field somewhere that doesnt disturb any of
the old fields. Old software that didnt care about that old field anyway
can continue to function. (Old software that did care will of course
have to give up, but this is an unavoidable price to be paid for the
sake of progress, barring total omniscience.)
Another problem that crops up frequently is that certain fields are
likely to make sense only if other fields have certain values. This is
not such a serious problem in practice; it just makes things more
confusing. Nevertheless, we note that the valid flag bits described in
the previous paragraph can help to clarify the situation.
Field-dumping programs can be very helpful for diagnostic purposes. A
desirable characteristic of such a program is that it doesnt have to
know much about what it is dumping. In particular, it would be nice if
the program could dump ASCII data in ASCII format, integer data in
integer format, and so on, without having to teach the program about new
fields all the time. So maybe we should add a data type component to our
fields, plus information on how long the field is, so that our dump
program can walk through the fields without knowing what the fields
mean.
But note that if we add one more component to each field, namely a tag
that tells what the field means, we can dispense with the valid flag
bits, and we can also avoid wasting space on the non-valid fields in the
file. Simple image creation applications can write out several fields
and be done.
We have now derived the essentials of a tag based image file format.
Finally, a caveat. A tag based scheme cannot guarantee painless growth.
But is does provide a useful tool to assist in the process.
Table 1/T.4
Make-up codes
Terminating codes
White run Code word Black run Code word
length length
0 00110101 0 0000110111
1 000111 1 010
2 0111 2 11
3 1000 3 10
4 1011 4 011
5 1100 5 0011
6 1110 6 0010
7 1111 7 00011
8 10011 8 000101
9 10100 9 000100
10 00111 10 0000100
11 01000 11 0000101
12 001000 12 0000111
13 000011 13 00000100
14 110100 14 00000111
15 110101 15 000011000
16 101010 16 0000010111
17 101011 17 0000011000
18 0100111 18 0000001000
19 0001100 19 00001100111
20 0001000 20 00001101000
21 0010111 21 00001101100
22 0000011 22 00000110111
23 0000100 23 00000101000
24 0101000 24 00000010111
25 0101011 25 00000011000
26 0010011 26 000011001010
27 0100100 27 000011001011
28 0011000 28 000011001100
29 00000010 29 000011001101
30 00000011 30 000001101000
31 00011010 31 000001101001
32 00011011 32 000001101010
33 00010010 33 000001101011
34 00010011 34 000011010010
35 00010100 35 000011010011
36 00010101 36 000011010100
37 00010110 37 000011010101
38 00010111 38 000011010110
39 00101000 39 000011010111
40 00101001 40 000001101100
41 00101010 41 000001101101
42 00101011 42 000011011010
43 00101100 43 000011011011
44 00101101 44 000001010100
45 00000100 45 000001010101
46 00000101 46 000001010110
47 00001010 47 000001010111
48 00001011 48 000001100100
49 01010010 49 000001100101
50 01010011 50 000001010010
51 01010100 51 000001010011
52 01010101 52 000000100100
53 00100100 53 000000110111
54 00100101 54 000000111000
55 01011000 55 000000100111
56 01011001 56 000000101000
57 01011010 57 000001011000
58 01011011 58 000001011001
59 01001010 59 000000101011
60 01001011 60 000000101100
61 00110010 61 000001011010
62 00110011 62 000001100110
63 00110100 63 000001100111
Table 2/T.4
Make-up codes
White run Code word Black run Code word
length length
64 11011 64 0000001111
128 10010 128 000011001000
192 010111 192 000011001001
256 0110111 256 000001011011
320 00110110 320 000000110011
384 00110111 384 000000110100
448 01100100 448 000000110101
512 01100101 512 0000001101100
576 01101000 576 0000001101101
640 01100111 640 0000001001010
704 011001100 704 0000001001011
768 011001101 768 0000001001100
832 011010010 832 0000001001101
896 011010011 896 0000001110010
960 011010100 960 0000001110011
1024 011010101 1024 0000001110100
1088 011010110 1088 0000001110101
1152 011010111 1152 0000001110110
1216 011011000 1216 0000001110111
1280 011011001 1280 0000001010010
1344 011011010 1344 0000001010011
1408 011011011 1408 0000001010100
1472 010011000 1472 0000001010101
1536 010011001 1536 0000001011010
1600 010011010 1600 0000001011011
1664 011000 1664 0000001100100
1728 010011011 1728 0000001100101
EOL 000000000001 EOL 000000000001
Note it is recognized that machines exist which accommodate larger paper
widths whilst maintaining the standard horizontal resolution. This
option has been provided for by the addition of the Make-up code set
defined as follows:
Run length Make-up codes
(black and white)
1792 00000001000
1856 00000001100
1920 00000001101
1984 000000010010
2048 000000010011
2112 000000010100
2176 000000010101
2240 000000010110
2304 000000010111
2368 000000011100
2432 000000011101
2496 000000011110
2560 000000011111
Appendix B: Data Compression Scheme 2
Abstract
This document describes a method for compressing bilevel data that is
based on the CCITT Group 3 1D facsimile compression scheme. It is
intended that it be used in conjunction with the Tag Image File Format.
References
1. Standardization of Group 3 facsimile apparatus for document
transmission, Recommendation T.4, Volume VII, Fascicle VII.3, Terminal
Equipment and Protocols for Telematic Services, The International
Telegraph and Telephone Consultative Committee (CCITT), Geneva, 1985,
pages 16 through 31.
2. Facsimile Coding Schemes and Coding Control Functions for Group 4
Facsimile Apparatus, Recommendation T.6, Volume VII, Fascicle VII.3,
Terminal Equipment and Protocols for Telematic Services, The
International Telegraph and Telephone Consultative Committee (CCITT),
Geneva, 1985, pages 40 through 48.
Relationship to the CCITT Specifications
The CCITT Group 3 and Group 4 specifications describe communications
protocols for a particular class of devices. They are not by themselves
sufficient to describe a disk data format. Fortunately, however, the
CCITT coding schemes can be readily adapted to this different
environment. The following is one such adaptation.
Coding Scheme
A line (row) of data is composed of a series of variable length code
words. Each code word represents a run length of either all white or all
black. (Actually, more than one code word may be required to code a
given run, in a manner described below.) White runs and black runs
alternate.
In order to ensure that the receiver (decompressor) maintains color
synchronization, all data lines will begin with a white run length code
word set. If the actual scan line begins with a black run, a white run
length of zero will be sent (written). Black or white run lengths are
defined by the code words in Tables 1 and 2. The code words are of two
types: Terminating code words and Make-up code words. Each run length is
represented by zero or more Make-up code words followed by exactly one
Terminating code word.
Run lengths in the range of 0 to 63 pels (pixels) are encoded with their
appropriate Terminating code word. Note that there is a different list
of code words for black and white run lengths.
Run lengths in the range of 64 to 2623 (2560+63) pels are encoded first
by the Make-up code word representing the run length that is nearest to,
not longer than, that required. This is then followed by the Terminating
code word representing the difference between the required run length
and the run length represented by the Make-up code.
Run lengths in the range of lengths longer than or equal to 2624 pels
are coded first by the Make-up code of 2560. If the remaining part of
the run (after the first Make-up code of 2560) is 2560 pels or greater,
additional Make-up code(s) of 2560 are issued until the remaining part
of the run becomes less than 2560 pels. Then the remaining part of the
run is encoded by Terminating code or by Make-up code plus Terminating
code, according to the range mentioned above.
It is considered an unrecoverable error if the sum of the run lengths
for a line do not equal the value of the ImageWidth field.
New rows always begin on the next available byte boundary.
No EOL code words are used. No fill bits are used, except for the
ignored bits at the end of the last byte of a row. RTC is not used.
Appendix C: Data Compression Scheme 32773 PackBits
Abstract
This document describes a compression scheme for paint type files. It is
intended for use in conjunction with the Tag Image File Format.
1) Motivation
The current TIFF specification allows for two compression schemes.
Compression type 1 is really no compression, other than basic pixel
packing. Compression type 2, based on CCITT 1D compression, is powerful,
but not trivial to implement and is designed for scanned data more than
data generated by paint programs. Simple byte-oriented run length
schemes tend to work well with paint data, since paint data often has
large areas of white space and areas filled with 8-bit patterns.
2) Description
Since several good schemes already exist, we may as well use one of
them. We somewhat arbitrarily pick the Macintosh PackBits scheme. It is
byte oriented, so there is no problem with word alignment. And it has a
good worst case behavior (at most 1 extra byte for every 128 input
bytes). For Macintosh users, there are toolbox utilities PackBits and
UnPackBits that will do the work for you, but it is easy to implement
your own.
A pseudo code fragment to unpack it might look like this:
Loop until you get the number of unpacked bytes you are expecting: Read
the next source byte into n. If n is between 0 and 127 inclusive,
copy the next n+1 bytes literally. Else if n is between -127 and -1
inclusive, copy the next byte -n+1 times. Else if n is 128, noop.
Endloop
In the inverse routine, its best to encode a 2 byte repeat run as a
replicate run except when preceded and followed by a literal run, in
which case its best to merge the three into one literal run. Always
encode 3 byte repeats as replicate runs.
So thats the algorithm. Other rules:
Each row must be packed separately. Do not compress across row
boundaries.
The number of uncompressed bytes per row is defined to be (ImageWidth +
7) / 8. If the uncompressed bitmap is required to have an even number of
bytes per row, decompress into word-aligned buffers.
If a run is larger than 128 bytes, simply encode the remainder of the
run as one or more additional replicate runs.
When PackBits data is uncompressed, the result should be interpreted as
per compression type 1 (no compression); i.e. the SamplesPerPixel,
BitsPerSample and PlanarConfiguration tags should be consulted to
interpret the image.
Appendix D: Using the Microsoft Windows Clipboard
The Microsoft Windows Clipboard provides a mechanism that allows
applications to pass information to each other. Pictures created in
Microsoft Paint, for example, may be passed as bitmaps to Microsoft
Write.
In general, the Clipboard is not recommended as a way of passing TIFF
information between applications. The amount of data associate with
image data can be very large. Currently, data passed through the
Microsoft Windows Clipboard is limited to 64K bytes. It is suggested
that applications employ file-based mechanisms to exchange TIFF data.
Aldus PageMaker, for example, implements a File Place command to allow
TIFF files to be imported.
For images requiring less than 64K bytes of TIFF data, a new Clipboard
format has been defined:
CF_TIFF Microsoft Tag Image File Format
(this symbol will be defined in the windows.h file distributed with the
Microsoft Windows Software Development Kit.)
The data associated with this format is a handle to a block of global
memory containing the same data as would be stored in a disk TIFF file.
When interpreting this memory, TIFF readers should interpret file
offsets as offsets from the beginning of the memory block.
Applications that are capable of passing TIFF information through the
Microsoft Windows Clipboard should preferably not render the TIFF
information until requested to do so. In addition to passingTIFF data,
these applications should also place bitmaps (Clipboard format
CF_BITMAP) on the Clipboard corresponding to the TIFF data. Applications
should judge whether to render these bitmaps formatted for the display
or for the currently selected output device. Placing a bitmap on the
Clipboard will allow the Clipboard viewer application (CLIPBRD.EXE) to
display a likeness of the image and will allow non-TIFF applications to
import, at least, an approximate bitmap. These and other Clipboard
techniques are described in the Microsoft Windows Programming Guide, a
document in the Microsoft Windows Software Development Kit.
Appendix E: Numerical List of TIFF Tags
SubfileType
Tag = 255 (FF)
Type = SHORT
N = 1
ImageWidth
Tag = 256 (100)
Type = SHORT
N = 1
ImageLength
Tag = 257 (101)
Type = SHORT
N = 1
BitsPerSample
Tag = 258 (102)
Type = SHORT
N = SamplesPerPixel
Compression
Tag = 259 (103)
Type = SHORT
N = SamplesPerPixel for PlanarConfiguration equal to 1 or 2.
PhotometricInterpretation
Tag = 262 (106)
Type = SHORT
N = 1
Threshholding
Tag = 263 (107)
Type = SHORT
N = 1
CellWidth
Tag = 264 (108)
Type = SHORT
N = 1
CellLength
Tag = 265 (109)
Type = SHORT
N = 1
FillOrder
Tag = 266 (10A)
Type = SHORT
N = 1
DocumentName
Tag = 269 (10D)
Type = ASCII
ImageDescription
Tag = 270 (10E)
Type = ASCII
Make
Tag = 271 (10F)
Type = ASCII
Model
Tag = 272 (110)
Type = ASCII
StripOffsets
Tag = 273 (111)
Type = SHORT or LONG
N = StripsPerImage for PlanarConfiguration equal to 1.
= SamplesPerPixel * StripsPerImage for PlanarConfiguration equal to 2
Orientation
Tag = 274 (112)
Type = SHORT
N = 1
SamplesPerPixel
Tag = 277 (115)
Type = SHORT
N = 1
RowsPerStrip
Tag = 278 (116)
Type = SHORT or LONG
N = 1
StripByteCounts
Tag = 279 (117)
Type = LONG
N = StripsPerImage for PlanarConfiguration equal to 1.
= SamplesPerPixel * StripsPerImage for PlanarConfiguration equal to 2
MinSampleValue
Tag = 280 (118)
Type = SHORT
N = SamplesPerPixel
MaxSampleValue
Tag = 281 (119)
Type = SHORT
N = SamplesPerPixel
XResolution
Tag = 282 (11A)
Type = RATIONAL
N = 1
YResolution
Tag = 283 (11B)
Type = RATIONAL
N = 1
PlanarConfiguration
Tag = 284 (11C)
Type = SHORT
N = 1
PageName
Tag = 285 (11D)
Type = ASCII
XPosition
Tag = 286 (11E)
Type = RATIONAL
YPosition
Tag = 287 (11F)
Type = RATIONAL
FreeOffsets
Tag = 288 (120)
Type = LONG
FreeByteCounts
Tag = 289 (121)
Type = LONG
GrayResponseUnit
Tag = 290 (122)
Type = SHORT
N = 1
GrayResponseCurve
Tag = 291 (123)
Type = SHORT
N = 2**BitsPerSample
Group3Options
Tag = 292 (124)
Type = LONG
N = 1
Group4Options
Tag = 293 (125)
Type = LONG
N = 1
ResolutionUnit
Tag = 296 (128)
Type = SHORT
N = 1
PageNumber
Tag = 297 (129)
Type = SHORT
N = 2
ColorResponseUnit
Tag = 300 (12C)
Type = SHORT
N = 1
ColorResponseCurves
Tag = 301 (12D)
Type = SHORT
N = 2**BitsPerSample (for Red sample)+
2**BitsPerSample (for Green sample)+
2**BitsPerSample(for Blue sample)